home *** CD-ROM | disk | FTP | other *** search
- /*
- File: ComponentDispatch.h
-
- Contains: Header for common routines for dispatching for a sound component
-
- Written by: Mark Cookson
-
- Copyright: Copyright © 1996-1999 by Apple Computer, Inc., All Rights Reserved.
-
- You may incorporate this Apple sample source code into your program(s) without
- restriction. This Apple sample source code has been provided "AS IS" and the
- responsibility for its operation is yours. You are not permitted to redistribute
- this Apple sample source code as "Apple sample source code" after having made
- changes. If you're going to re-distribute the source, we require that you make
- it clear in the source that the code was descended from Apple sample source
- code, but that you've made changes.
-
- Change History (most recent first):
- 8/13/1999 Karl Groethe Updated for Metrowerks Codewarror Pro 2.1
-
-
- */
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // Sound Component Function Prototypes
-
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // component stuff
- #pragma once
- #include <SoundComponents.h>
- #ifdef COMPRESSION
- #define kOutputSampleFormat 'ALAW' // output sample format
- #endif
- #ifdef DECOMPRESSION
- #define kOutputSampleFormat 'twos' // output sample format
- #endif
-
- #define kMaxOutputSamples 1024 // max no. samples in output buffer
- #define SoundComponentEntryPoint ALAWCompressor
- #define kSoundComponentVersion 0x00010000 // version for this sound component
- #define kRequiredSndMgrMajorRev 3 // Sound Manager version required to run this component
-
- #define kOutputSampleSize 16 // output sample size
-
- typedef struct {
-
- // these are general purpose variables that every sound component will need
- ComponentInstance sourceComponent; // component to call when we need more data
- SoundComponentDataPtr sourceDataPtr; // pointer to source data structure
- SoundComponentData thisComponent; // description of this component's output
- Handle globalsHandle; // handle to component globals
- short outputFrames; // max no. frames in output buffer
- short outputSamples; // max no. samples in output buffer
- CompressionInfo compInfo; // info about compressor
- CompressionInfo destCompInfo; // info about destination
- Boolean reverse; // true if data should be played back in reverse
- Boolean pad1;
- Byte buffer[kMaxOutputSamples * 2]; // room for 8-bit, stereo samples
- } SoundComponentGlobals, *SoundComponentGlobalsPtr;
-
- #ifdef COMPRESSION
- void InitializeCompressor (SoundComponentGlobalsPtr globals);
- void CompressALaw (short *inbuf, Byte *outbuf, unsigned long framesToConvert, unsigned long numChannels);
- #endif
- #ifdef DECOMPRESSION
- void InitializeDecompressor (SoundComponentGlobalsPtr globals);
- void DecompressALaw (Byte *inbuf, short *outbuf, unsigned long framesToConvert, unsigned long numChannels);
- #endif
-
- ComponentResult PrimeSource (SoundComponentGlobalsPtr globals);
-
- void GetCompressorInfo (CompressionInfoPtr cp);
-
- pascal ComponentResult __SoundComponentOpen(void *unused1, ComponentInstance self);
- pascal ComponentResult __SoundComponentClose(SoundComponentGlobalsPtr globals, ComponentInstance self);
- pascal ComponentResult __SoundComponentRegister(SoundComponentGlobalsPtr globals);
- pascal ComponentResult __SoundComponentCanDo(void *unused1, short selector);
-
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // basic stuff
-
- pascal ComponentResult __SoundComponentSetSource(SoundComponentGlobalsPtr globals, SoundSource sourceID, ComponentInstance source);
- pascal ComponentResult __SoundComponentGetSourceData(SoundComponentGlobalsPtr globals, SoundComponentDataPtr *sourceData);
- pascal ComponentResult __SoundComponentSetOutput(SoundComponentGlobalsPtr globals, SoundComponentDataPtr requested, SoundComponentDataPtr *actual);
-
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // info methods
-
- pascal ComponentResult __SoundComponentGetInfo(SoundComponentGlobalsPtr globals, SoundSource sourceID, OSType selector, void *infoPtr);
-
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // control methods
-
- pascal ComponentResult __SoundComponentStopSource(SoundComponentGlobalsPtr globals, short count, SoundSource *sources);
- pascal ComponentResult __SoundComponentPlaySourceBuffer(SoundComponentGlobalsPtr globals, SoundSource sourceID, SoundParamBlockPtr pb, long actions);
-
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // types
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- #if GENERATINGPOWERPC
-
- // These structs are use in PowerMac builds to cast the
- // ComponentParameters passed into our component's entry point.
-
- enum {
- uppSoundComponentEntryPointProcInfo = kPascalStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ComponentParameters *)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(void *)))
- };
-
- // These are used to create the routine descriptor to call each function.
-
- enum {
- upp__SoundComponentOpenProcInfo = kPascalStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(void *)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(ComponentInstance)))
- };
-
- enum {
- upp__SoundComponentCloseProcInfo = kPascalStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SoundComponentGlobalsPtr)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(ComponentInstance)))
- };
-
- enum {
- upp__SoundComponentRegisterProcInfo = kPascalStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SoundComponentGlobalsPtr)))
- };
-
- enum {
- upp__SoundComponentSetSourceProcInfo = kPascalStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SoundComponentGlobalsPtr)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(SoundSource)))
- | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(ComponentInstance)))
- };
-
- enum {
- upp__SoundComponentGetSourceDataProcInfo = kPascalStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SoundComponentGlobalsPtr)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(SoundComponentDataPtr)))
- };
-
- enum {
- upp__SoundComponentSetOutputProcInfo = kPascalStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SoundComponentGlobalsPtr)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(SoundComponentDataPtr)))
- | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(SoundComponentDataPtr)))
- };
-
- enum {
- upp__SoundComponentGetInfoProcInfo = kPascalStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SoundComponentGlobalsPtr)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(SoundSource)))
- | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(OSType)))
- | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(void *)))
- };
-
- enum {
- upp__SoundComponentStopSourceProcInfo = kPascalStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SoundComponentGlobalsPtr)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(SoundSource)))
- };
-
- enum {
- upp__SoundComponentPlaySourceBufferProcInfo = kPascalStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SoundComponentGlobalsPtr)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(SoundSource)))
- | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(SoundParamBlockPtr)))
- | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long)))
- };
-
- #define CallComponentFunctionWithStorageUniv(storage, params, funcName) \
- CallComponentFunctionWithStorage(storage, params, &funcName##RD)
- #define CallComponentFunctionUniv(params, funcName) \
- CallComponentFunction(params, &funcName##RD)
- #define INSTANTIATE_ROUTINE_DESCRIPTOR(funcName) RoutineDescriptor funcName##RD = \
- BUILD_ROUTINE_DESCRIPTOR (upp##funcName##ProcInfo, funcName)
-
- INSTANTIATE_ROUTINE_DESCRIPTOR(__SoundComponentRegister);
- INSTANTIATE_ROUTINE_DESCRIPTOR(__SoundComponentClose);
- INSTANTIATE_ROUTINE_DESCRIPTOR(__SoundComponentOpen);
- INSTANTIATE_ROUTINE_DESCRIPTOR(__SoundComponentSetSource);
- INSTANTIATE_ROUTINE_DESCRIPTOR(__SoundComponentGetSourceData);
- INSTANTIATE_ROUTINE_DESCRIPTOR(__SoundComponentSetOutput);
- INSTANTIATE_ROUTINE_DESCRIPTOR(__SoundComponentGetInfo);
- INSTANTIATE_ROUTINE_DESCRIPTOR(__SoundComponentStopSource);
- INSTANTIATE_ROUTINE_DESCRIPTOR(__SoundComponentPlaySourceBuffer);
-
- #else //GENERATING68K
-
- #define CallComponentFunctionWithStorageUniv(storage, params, funcName) \
- CallComponentFunctionWithStorage(storage, params, (ComponentFunctionUPP)funcName)
- #define CallComponentFunctionUniv(params, funcName) \
- CallComponentFunction(params, (ComponentFunctionUPP)funcName)
- #endif
-